//package com.etc;
//
//
//import org.apache.hadoop.conf.Configuration;
//import org.apache.hadoop.fs.Path;
//import org.apache.hadoop.io.LongWritable;
//import org.apache.hadoop.io.Text;
//import org.apache.hadoop.mapred.FileInputFormat;
//import org.apache.hadoop.mapred.FileOutputFormat;
//import org.apache.hadoop.mapred.FileSplit;
//import org.apache.hadoop.mapreduce.Job;
//import org.apache.hadoop.mapreduce.Mapper;
//import org.apache.hadoop.mapreduce.Reducer;
//import sun.plugin.dom.exception.WrongDocumentException;
//
//import javax.naming.Context;
//import java.io.IOException;
//
//public class InventedIndex {
//  //输出值：key为单词+文件地址 value为频数，指定1
//    public static class MapInventedIndex extends Mapper<LongWritable,Text,Text,Text>{
//        @Override
//      protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//          //获取文件名、
//            FileSplit split = (FileSplit) Context.getInputsplit();
//      String fileName = split.getPath().getName();
//      //读取一行数据
//      String line = value.toString();
//      //遍历split，取出一个个数据,加文件名作为key,value设为1输出
//      for(String s : split1){
//          Context.write(new Text(s+"--->"+fileName),new Text("1"));
//      }
//      }
//  }
//
//  public static class combinerInventedIndex extends Reducer<Text,Text,Text,Text>{
//      @Override
//      protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
//          //将从map中接收到的key转为string类型，并以-->切分，结果存入word中
//          //此时,word[0]s ,word[1]为filename
//          String[] Word = key.toString().split("-->");
//          //定义一个变量sum，初始值为0
//          int sum = 0;
//          //遍历value，获取的value加到sum上,因为value是Text类型。所以要先将其转为String类型，在转int型，才能与sum相加
//          //因为我们从map中接受的value为1，所以此处遍历value获取到的value都为1，相当于sum++
//          for(Text value:values){
//              sum = sum + Integer.parseInt(value.toString());//sum++
//          }
//          //s作为key，filename和sum作为value发出
//          context.wait(new Text(Word[0]),new Text(Wrod[1])+"-->"+sum+"");
//      }
//  }
//
//  //将每个单词对应的多个文件及频数整合到一行
//    public static class ReduceInvertedIndex extends Reducer<Text,Text,Text,Text>{
//      @Override
//      protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
//          //定义一个空字符串
//          String str = "";
//          //遍历value,相同的key合并value到一行
//          for (Text value:values){
//              str = str + value;
//          }
//          context.write(key,new Text(str));
//      }
//  }
//   public static void main(String[] args) throws IOException,ClassNotFoundException,InterruptedException{
//       System.setProperty("HADOOP_USER_NAME","root");
//       Configuration conf = new Configuration();
//
//       Job job = Job.getInstance(conf);
//
//       job.setJarByClass(InventedIndex.class);
//       job.setMapperClass(MapInventedIndex.class);
//       job.setCombinerClass(combinerInventedIndex.class);
//       job.setReducerClass(ReduceInvertedIndex.class);
//          //map的输出类型
//       job.setMapOutputKeyClass(Text.class);
//       job.setMapOutputValueClass(Text.class);
//          //reduce的输出类型
//       job.setOutputKeyClass(Text.class);
//       job.setOutputValueClass(Text.class);
//
//       FileInputFormat.addInputPath(job.new Path("f:/all/a/cde"));
//       FileOutputFormat.setOutputPath(job.new Path("f:/all/a/cde"));
//
//       job.setNumReduceTasks(1);
//
//       System.exit(job.waitForCompletion(true)?0:1);
//   }
//}
//
